package com.parking.user.service;

import com.parking.common.core.model.PageInfo;
import com.parking.dto.RentersUserDto;
import com.parking.dto.UserInfoDto;
import com.parking.form.*;
import com.parking.user.entity.UserInfo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.io.IOException;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author 香菜狗带
 * @since 2023年11月28日
 */
public interface UserInfoService extends IService<UserInfo> {
    /***
     * 查询当前用户信息
     * 参数：
     ("用户Id")：userId;
     */
    UserInfoDto getUserInfoById(Integer userId);
    /**
     * 查询全部用户
     * 参数：
     * phone:手机号
     * userInfoName:姓名
     * */
    PageInfo getUserInfoAll(SelUserInfoForm form);
    /**
     * 修改用户信息
     * 参数：
     * phone:手机号
     * userInfoName:姓名
     *
     * */
    void upUserDataById(UpDataForm form, Integer userId);
    /**
     * 修改头像
     * 参数：
     * image:文件名
     * userInfoImg：用户头像地址
     * fileName:文件名称
     * */
    void upUserInfoImg(UpUserImgForm form) throws IOException;
    /**
     * 实名认证
     * 参数：
     * userInfoName:姓名
     * userInfoCard：用户头像地址
     * userId:用户Id
     * */
    Boolean attestationName(AtteUserNameForm form, Integer userId) throws IOException;

    /////////////////////////////////////////////////////////////////////////////////////
    /**
     * 判断用户信息是否实名
     * 参数: 用户信息Id userInfoId
     * 返回: 用户名称 userInfoName
     * 用户电话 userInfoTel
     * 用户年龄 userInfoAge
     * 用户头像 userInfoImg
     * 方法: 1.判断userInfoId是否存在对应的用户信息 若不存在则抛异常
     * 2.判断对应的用户信息是否实名 若不是则抛异常
     * 3.将用户信息放入Dto返回
     */
    UserInfoDto selectUserInfoById(Integer userInfoId);
    /**
     * 上传头像
     * 参数：
     * path:地址
     * */
    void upLoad(String path, Integer userId);
    /**
     * 根据ID查询用户账号
     * 参数: 用户Id userId
     * 返回: 用户个人信息
     * */
    UserInfo getUserInfo(Integer userId);
    /***
     * 出租客
     * 查询根据ID用户信息
     * 参数：
     * ("用户Id")：platformInfoId;
     * ("令牌")：authorization;
     *
     *  返回出租客用户信息dto：
     *  用户信息Id：userInfoId
     *  用户昵称：userInfoName
     *  用户电话：userInfoTel
     */
    RentersUserDto findUserById(Integer rentersId, Integer userInfoId) throws Exception;
    /**
     * 用户修改密码
     * 参数：
     *  ("旧密码")：oldPass;
     * ("新密码")：newPass;
     * userId:用户Id
     * */
    void upUserPass(UpUserPassForm form, Integer userId);
}
